package com.qidian.buy.util;

import java.util.concurrent.*;

/**
 * Author: 戴着假发的程序员
 * Date: 2024-04-22 14:59
 * company: 起点编程
 * 线程池的工具类
 **/
public class ThreadPoolTools {
    // 缓存所有的线程池
    private static ConcurrentHashMap<String, ThreadPoolExecutor>
        pools = new ConcurrentHashMap<>();

    public static ThreadPoolExecutor getPool(String name) {
        if(pools.containsKey(name)){
            return pools.get(name);
        }
        // 创建线程池
        // 参数1： corePoolSize 核心线程数  线程池正常运行的线程数量
        // 参数2： maximumPoolSize 最大线程数
        // 参数3： keepAliveTime 线程空闲时间  3
        // 参数4： unit 时间单位 TimeUnit.SECONDS
        // 参数5： workQueue 阻塞队列
        // 参数6： threadFactory 线程工厂
        // 参数7： handler 拒绝策略
        ThreadPoolExecutor pool = new ThreadPoolExecutor(5,20,3, TimeUnit.MINUTES, new ArrayBlockingQueue<>(10),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());
        // 缓存线程池
        pools.put(name,pool);
        return pool;
    }
}
